package stack_queue;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * 队列
 * 继承自 Collection 接口
 * LinkedList(类) 和 ArrayDeque(类) 都能实现 Deque 接口
 * 对于队列，有两种相同的操作：
 * 1.以抛出异常的形式提醒出错：
 *      入队：add(e)     出队：remove()     查看队首元素：element()
 *      String e = queue.remove();  //针对空队列进行出队操作，是一个错误的操作，remove会以抛出一个异常的形式提醒我们出错了
 * 2.返回一个特殊的值，null
 *      入队：offer(e)   出队：poll()       查看队首元素：peek()
 *      String e = queue.poll();    //null  null作为一个特殊值返回，提醒我们出错了
 */

public class QueueDome {
    public static void main(String[] args) {
        //空队列(empty)
//        Queue<String> queue = new LinkedList<>();

        //通常使用第二种：进行入队、出队、查看队首元素操作
        Queue<String> queue = new LinkedList<>();
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            String e = scanner.next();
            //入队
            queue.offer(e);
        }
        //查看队首元素
        String E = queue.peek();
        System.out.println(E);
        //出队(第一种方法)
//        while(true){
//            String e = queue.poll();
//            if(e == null){
//                break;
//            }
//            System.out.println(e);
//        }
        //出队(第二种方法)
        while(!queue.isEmpty()){
            String e = queue.poll();
            System.out.println(e);
        }
    }
}
